package araujoCoronelVillamayor.plantasVsZombies.domain

import java.util.ArrayList
import org.uqbar.commons.utils.Observable
import java.io.Serializable

@Observable
class JardinZen implements Serializable {
	@Property ArrayList<Planta> plantas
	static int cantidadMaximaPlantasAcuaticas = 20
	static int cantidadMaximaPlantasTerrestres = 20
	
	new() {
		this.plantas = new ArrayList<Planta>		
	}
	
	def agregarPlanta(Planta unaPlanta){
		if (this.hayEspacio(unaPlanta)){
			plantas.add(unaPlanta)
		}
		else{
			//¿Tirar una excepción?
		}
	}
	
	def hayEspacio(Planta unaPlanta){//boolean hayEspacio(Planta unaPlanta){
		if (unaPlanta.sosPlantaAcuatica()){
			return (this.cantidadPlantasAcuaticas < cantidadMaximaPlantasAcuaticas)
		}
		else{
			if (unaPlanta.sosPlantaTerrestre){
				return (this.cantidadPlantasTerrestres() < cantidadMaximaPlantasTerrestres)
			}
		}
	}
	
	def damePlantasAcuaticas(){
		if (!plantas.empty){
			plantas.filter[ planta | planta.sosPlantaAcuatica ]
		}
	}
	
	def damePlantasTerrestres(){
		if (!plantas.empty){
			plantas.filter[ planta | planta.sosPlantaTerrestre ]
		}
	}
	
	def int cantidadPlantasAcuaticas(){
		if (!plantas.empty){
			return damePlantasAcuaticas.size
		}
		else{
			return 0
		}
	}
	
	def int cantidadPlantasTerrestres(){
		if (!plantas.empty){
			return damePlantasTerrestres.size
		}
		else{
			return 0
		}
	}
	
	def quitarPlanta(Planta unaPlanta){
		plantas.remove(unaPlanta)
	}
	
	def search(String tipo){
		plantas.filter [ planta | planta.tipo.equals(tipo) ].toList
//		if (tipo == "Acuatica"){
//			plantas.filter[ planta | planta.sosPlantaAcuatica ].toList
//		}
//		else{
//			if (tipo == "Terrestre"){
//				plantas.filter[ planta | planta.sosPlantaTerrestre ].toList
//			}
//		}
	}
	
	/*def void setPlanta(Planta unaPlanta) {
		if (this.cantidadPlantasAcuaticas() > cantidadMaximaPlantasAcuaticas|| this.cantidadPlantasTerrestres() > cantidadMaximaPlantasTerrestres) 
			throw new UserException("No puede agregar más plantas, ha exedido la cantidad máxima.")

		this._cantidadPlantasAcuaticas = cantidadPlantasAcuaticas
		this._cantidadPlantasTerrestres = cantidadPlantasTerrestres
			
		ObservableUtils.firePropertyChanged(this, "agregarPlanta", agregarPlanta)
	}*/
	
}